import axios from 'axios'
import { Dialog, showDialog } from 'vant'

import { getToken, removeToken } from './auth'

// 配置新建一个 axios 实例
const service = axios.create({
	baseURL: import.meta.env.VITE_APP_BASE_API,
	timeout: 50000,
	headers: { 'Content-Type': 'application/json' }
})

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 在发送请求之前做些什么 token
		const token = getToken()
		if (token) {
			config.headers['token'] = `${getToken()}`
		}
		return config
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error)
	}
)

// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// 对响应数据做点什么
		const res = response.data
		console.log('响应拦截器监测到返回的数据：' + res.code)
		//检查res.code是否存在并且它的值不等于0
		if (res.code && res.code !== 0) {
			// `token` 过期或者账号已在别处登录
			if (res.code === 401 || res.code === 4001) {
				removeToken()
				window.location.href = '/login' // 去登录页
			}
			console.log('返回的数据：' + JSON.stringify(res))
			return response.data
		} else {
			return Promise.reject(service.interceptors.response)
		}
	},
	(error) => {
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			showDialog.alert({ message: '网络超时' })
		} else if (error.message == 'Network Error') {
			showDialog.alert({ message: '网络连接错误' })
		} else {
			if (error.response.data) showDialog.alert({ message: error.response.statusText })
			else showDialog.alert({ message: '接口路径找不到' })
		}
		return Promise.reject(error)
	}
)

export const baseRequest = (url, value = {}, method = 'post', options = {}) => {
	url = sysConfig.API_URL + url
	if (method === 'post') {
		return service.post(url, value, options)
	} else if (method === 'get') {
		return service.get(url, {
			params: value,
			...options
		})
	} else if (method === 'formdata') {
		return service({
			method: 'post',
			url,
			data: value,
			// 转换数据的方法
			transformRequest: [
				function (data) {
					let ret = ''
					for (const it in data) {
						ret += `${encodeURIComponent(it)}=${encodeURIComponent(data[it])}&`
					}
					ret = ret.substring(0, ret.length - 1)
					return ret
				}
			],
			// 设置请求头
			headers: {
				'Content-Type': 'multipart/form-data'
			}
		})
	}
}
// 导出 axios 实例
export default service
